package algorithm;

/**
 * 前置
 * 算法(O) + 数据结构
 *
 * 数据结构
 *   物理层面上是
 *     数组+链表
 *
 * 算法的优劣
 *   计算算法时间差（幅度不够循环来凑）
 *   空间测算
 *
 * 空间复杂度
 *   空间复杂度(Space Complexity)是对一个算法在运行过程中临时占用存储空间大小的量度，记做S(n)=O(f(n))。
 *   比如直接插入排序的时间复杂度是O(n^2),空间复杂度是O(1) 。而一般的递归算法就要有O(n)的空间复杂度了，
 *   因为每次递归都要存储返回信息。一个算法的优劣主要从算法的执行时间和所需要占用的存储空间两个方面衡量。
 *
 * 时间复杂度
 *   Big O 表示时间复杂度
 *   随着程序规模的扩大 时间的趋势。 例如数组100 数组 1000000 的排序，随着时间的复杂度提升空间也在提升。
 *
 * 举例子
 *   访问数组某个位置的值 它的时间和空间的复杂度是怎么变化的？ 随着空间的变大访问时间没变化。 我么称作时间复杂度是O(1)时间复杂度是个常数。
 *   链表                                            随着空间的变大访问的时间越来越慢。O(n) n代表空间无穷大的时候时间无穷大。
 *                                                  循环就是n往上加就n往上加 比如双层for O(n^2)
 *   数组的平局数                                     O(n)
 *
 * 忽略常数项
 *   O(2n) 空间是原来n被时间变为2n 一般忽略 2
 *   忽略时间复杂度的低次项  算出来是 n^2 + n 后面的n就省略了。
 *
 * 如何科学的计算时间和空间的复杂度？
 *   随机数生成器
 *   对数器
 *   写算法的思路
 *       1、简单到复杂
 *         验证一步走一步
 *         多打印中间结果
 *       2、先局部后整体
 *         没思路先分析
 *       3、选粗糙后精细
 *         变量更名
 *         语句合并
 *         边界处理 （循环的最后一个是否需要处理这种边界的 边界处理一般需要结合 if语句处理）
 * 1. sort
 * https://mp.weixin.qq.com/s/IAZnN00i65Ad3BicZy5kzQ
 */
public class Preposition {
    public static void main(String[] args) {
        System.out.println("算法+数据结构");
    }
}
